/*
REWRITTEN BY XINEF
*/

#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "deadmines.h"

class instance_deadmines : public InstanceMapScript
{
    public:
        instance_deadmines() : InstanceMapScript("instance_deadmines", 36) { }

        struct instance_deadmines_InstanceMapScript : public InstanceScript
        {
			instance_deadmines_InstanceMapScript(Map* map) : InstanceScript(map)
			{
			}

			void Initialize()
			{
				memset(&_encounters, 0, sizeof(_encounters));
			}

			void OnGameObjectCreate(GameObject* gameobject)
			{
				switch (gameobject->GetEntry())
				{
					case GO_FACTORY_DOOR:
						if (_encounters[TYPE_RHAHK_ZOR] == DONE)
							HandleGameObject(0, true, gameobject);
						break;
					case GO_IRON_CLAD_DOOR:
						if (_encounters[TYPE_CANNON] == DONE)
							HandleGameObject(0, true, gameobject);
						break;
				}
			}

			void SetData(uint32 type, uint32 data)
			{
				switch (type)
				{
					case TYPE_RHAHK_ZOR:
					case TYPE_CANNON:
						_encounters[type] = data;
						break;
				}

				if (data == DONE)
					SaveToDB();
			}

			std::string GetSaveData()
			{
				std::ostringstream saveStream;
				saveStream << "D E " << _encounters[0] << ' ' << _encounters[1];
				return saveStream.str();
			}

			void Load(const char* in)
			{
				if (!in)
					return;

				char dataHead1, dataHead2;
				std::istringstream loadStream(in);
				loadStream >> dataHead1 >> dataHead2;
				if (dataHead1 == 'D' && dataHead2 == 'E')
				{
					for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
					{
						loadStream >> _encounters[i];
						if (_encounters[i] == IN_PROGRESS)
							_encounters[i] = NOT_STARTED;
					}
				}
			}

		private:
			uint32 _encounters[MAX_ENCOUNTERS];
        };

        InstanceScript* GetInstanceScript(InstanceMap* map) const
        {
            return new instance_deadmines_InstanceMapScript(map);
        }
};

void AddSC_instance_deadmines()
{
    new instance_deadmines();
}
